/********************************************************
 Name          : main.c
 Author        : Rafal Sokolowski
 Copyright     : GPL
 Description   : EVK1100 template
 **********************************************************/

// Include Files 

#include <avr32/io.h>
#include "compiler.h"
#include "board.h"
#include "gpio.h"
#include "intc.h"
#include "tc.h"
#include "pm.h"
#include "pwm.h"
#include "adc.h"
#include "usart.h"
//#include "print_funcs.h" /// error nie widzial!!

// Nasze moduly
#include "frame.h"
#include "inity.h"
#include "btny.h"
#include "ledy.h"
#include "tmry.h"
#include "uarty.h"

#define trace(x) usart_write_line(&AVR32_USART0, x "\n");

#define EXAMPLE_TC                  (&AVR32_TC)

volatile avr32_tc_t *tc = EXAMPLE_TC;

int main(void) {
	trace("MAIN:\t start");
	init(tc);
	trace("MAIN:\t after init");
	while (1){
// TODO: czemu by nie dodac tu funkcji ''ifChecker()'' ktora by miala te wszystkie ify w sobie :D

		frameTranslate(); // skladanie ramki do wyslania(TODO tam tez powinno byc rozkladanie ramki przychodzacej)


		// master or slave program
		if ( 0 == g_oFlags.u8_MasterSlave ) { // im working in slave mode!
			// TODO execute chasing leds
			chaseLed();
			button3SecPeriod(); // sprawdzanie timera (nie przycisku!) do przelaczania trybu plytki M/S

		}
		else { // im working in MASTER mode
			masterLed();
			//buttonCheck();
		}









		// TODO upiekszyc
		if ( g_oFlags.u8_ButtonJoyInterrupt ){
			trace("MAIN:\t ButtonJoyInterrupt ");
			// TODO call function here
			g_oFlags.u8_ButtonJoyInterrupt = 0;
		}
		if ( g_oIncomingFrame.u16_MsgIsFresh ){
			trace("MAIN:\t MsgIsFresh ");
			// TODO call function here
			g_oIncomingFrame.u16_MsgIsFresh = 0;
		}
		if ( g_oOutcomingFrame.u16_MsgIsReadyToGo)
		{
			trace("MAIN:\t MsgIsReadyToGo ");
			// TODO call function here
			// TODO to moze byc do usuniecia
			g_oIncomingFrame.u16_MsgIsFresh = 0;
		}








		//do timera
		if (g_oFlags.u8_ServicePending) {
			timerProcessServices();
			g_oFlags.u8_ServicePending = 0;
		}
	};
	
	return 0;
}
